<?php
/**
 * DepartamentoService
 *
 * Acessa o Dao e o Repositorio do Departamento e disponibiliza a outras
 * classes metodos (Servicos) que precisam.
 */
class DepartamentoService extends Model {

    /**
     * @var DepartamentoDao
     */
    private $departamentoDao;
    /**
     * @var ClienteService
     */
    private $clienteService;
    /**
     * @var UsuarioService
     */
    private $usuarioService;
    /**
     * @var SetorService
     */
    private $setorService;

    public function injectDependencies() {
        $this->departamentoDao = DepartamentoDao::getInstance();
        $this->clienteService = ClienteService::getInstance();
        $this->usuarioService = UsuarioService::getInstance();
        $this->setorService = SetorService::getInstance();
    }

    /**
     * @method  findAllDepartaments
     *
     * Lista todos os departamentos no sistema
     *
     * @return  array
     * @since   2011-12-11
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public function findAll($AsSimple = false) {
        $ArDepartaments = $this->departamentoDao->findAll();
        if( !$AsSimple ) {
            $this->fillDepartaments( $ArDepartaments );
        }
        return $ArDepartaments;
    }

    public function save($StDepartamento) {
        return $this->departamentoDao->save($StDepartamento);
    }

    //07-04
    public function findById($IDDepartamento) {
        $Departament = $this->departamentoDao->findById($IDDepartamento);
        $this->fillDepartaments( $Departament );
        return $Departament;
    }

    public function findSimpleById($IDDepartamento) {
        return $this->departamentoDao->findById($IDDepartamento);
    }

    //15-04
    public function update($ArDados) {
        if( !$this->departamentoDao->update($ArDados) ) {
            return false;
        }
        if( $ArDados['IDDepartamento'] == Dracosys::getLoggedUser()->getTDepartamento()->getIDDepartamento() ) {
            $this->usuarioService->reload();
        }
        return true;
    }

    //01-06
    public function delete($IDDepartamento) {
        if( !$this->departamentoDao->delete($IDDepartamento) ) {
            return false;
        }
        if( $IDDepartamento == Dracosys::getLoggedUser()->getTDepartamento()->getIDDepartamento() ) {
            $this->usuarioService->reload();
        }
        return true;
    }

    private function fillDepartaments(&$MxDepartaments) {
        if( !empty($MxDepartaments) ) {
            $this->fillDepartamentWithSectors($MxDepartaments);
        }
    }

    public function fillDepartamentWithSectors(&$MxDepartament) {
        if(!is_array($MxDepartament)) {
            $MxDepartament->setTSetores( $this->setorService->findSectorByDepartament( $MxDepartament ) );
            return;
        }
        foreach($MxDepartament as &$Departament) {
            $Departament->setTSetores( $this->setorService->findSectorByDepartament( $Departament ) );
        }
    }

}

?>
